package com.example.snap_it;


import java.util.HashMap;
import java.util.LinkedList;

import snap_it.dao.ConcreteDaoAlbumDeFotosSalvaExterno;
import snap_it.dao.DAOAlbumDeFotos;
import snap_it.excecoes.NaoPodemosAcessarMemoriaExternaException;



import android.os.Environment;


public class SingletonArmazenaAlbumDeFotosTiradas 
{
	private static  SingletonArmazenaAlbumDeFotosTiradas singleton;
	
	private DAOAlbumDeFotos daoGerenciaAlbumDeFotos;
	
	private SingletonArmazenaAlbumDeFotosTiradas()
	{
		new HashMap<String, LinkedList<FotoEDescricao>>();
		daoGerenciaAlbumDeFotos = new ConcreteDaoAlbumDeFotosSalvaExterno();
	}
	
	private boolean podemosEscreverNaMemoriaExterna() {
	    String state = Environment.getExternalStorageState();
	    if (Environment.MEDIA_MOUNTED.equals(state)) {
	        return true;
	    }
	    return false;
	}
	
	private boolean podemosLerNaMemoriaExterna() {
	    String state = Environment.getExternalStorageState();
	    if (Environment.MEDIA_MOUNTED.equals(state) ||
	        Environment.MEDIA_MOUNTED_READ_ONLY.equals(state)) {
	        return true;
	    }
	    return false;
	}
	
	
	public static synchronized SingletonArmazenaAlbumDeFotosTiradas getInstance()
	{
		if(singleton == null)
		{
			singleton = new SingletonArmazenaAlbumDeFotosTiradas();
		}
		
		return singleton;
	}
	
	public void adicionarAlbumDeFotos(String nomeAlbum, LinkedList<FotoEDescricao> fotosTiradas) throws NaoPodemosAcessarMemoriaExternaException
	{
		if(podemosEscreverNaMemoriaExterna() == true)
		{
			daoGerenciaAlbumDeFotos.adicionarAlbumDeFotos(nomeAlbum, fotosTiradas);
			
		}
		else
		{
			throw new NaoPodemosAcessarMemoriaExternaException();
		}
		
	}
	
	public void apagarAlbumDeFotos(String nomeAlbum)throws NaoPodemosAcessarMemoriaExternaException
	{
		if(podemosEscreverNaMemoriaExterna() == true)
		{
			daoGerenciaAlbumDeFotos.apagarAlbumDeFotos(nomeAlbum);
		}
		else
		{
			throw new NaoPodemosAcessarMemoriaExternaException();
		}
	}
	
	public LinkedList<FotoEDescricao> getAlbumDeFotos(String nomeAlbum) throws NaoPodemosAcessarMemoriaExternaException
	{
		if(podemosLerNaMemoriaExterna() == true)
		{
			return daoGerenciaAlbumDeFotos.getAlbumDeFotos(nomeAlbum);	
		}
		else
		{
			throw new NaoPodemosAcessarMemoriaExternaException();
		}
	}
	
	public LinkedList<String> getNomesAlbunsDeFotosCriadas() throws NaoPodemosAcessarMemoriaExternaException
	{
		if(podemosLerNaMemoriaExterna() == true)
		{
			return daoGerenciaAlbumDeFotos.getNomesAlbunsDeFotosCriadas();	
		}
		else
		{
			throw new NaoPodemosAcessarMemoriaExternaException();
		}
	}
	
	
	

}
